const path = require('path')
const webpack = require('webpack')
const {
  CleanWebpackPlugin
} = require('clean-webpack-plugin')
const HtmlWebpackPlugin = require('html-webpack-plugin')
// 可以读取.env文件， 获取里面的值 设置到process.env里面
const dotenv = require('dotenv')
dotenv.config()

console.log('.env process.env.NODE_ENV', process.env.NODE_ENV)
console.log('.env ', process.env.HOSTNAME)
module.exports = {
  target: ["web", "es5"],
  entry: {
    app: '@/index.ts' 
  },
  // 设置webpack 语法

  output: {
    filename: '[name].bundle.js',
    path: path.resolve(__dirname, 'dist'),
    clean: true
  },
  module: {
    rules: [{
        test: /\.css$/,
        // 执行顺序是倒序
        use: ['style-loader', 'css-loader']
      },
      //匹配图片
      {
        test: /\.(png|svg|jpg|gif)$/,
        use: ['file-loader']
      },
      // 匹配文字
      {
        test: /\.(woff|woff2|eot|ttf|otf)$/,
        use: ['file-loader']
      },
      // 匹配ts
      {
        test: /\.tsx?$/,
        exclude: /node_modules/,
        use: [
          {loader:"babel-loader"},
          {loader:"ts-loader"}
        ]

        // loader: ["babel-loader","ts-loader"] 

      }
    ]
  },
  resolve: {
    alias: {
      "@": path.resolve(__dirname, "src")
    },
    // Add `.ts` and `.tsx` as a resolvable extension.
    extensions: [".ts", ".tsx", ".js"]
    // 这个配置英文文档 有空看一下
    // fallback:{
    //   "path": false,
    //   "os": false,
    //   "fs":false
    // }
  },
  plugins: [
    new CleanWebpackPlugin(),
    new HtmlWebpackPlugin({
      title: 'Production',
      template: "./www/index.html"
    }),
    // 定义全局变量 在任何模块都可以访问
    new webpack.DefinePlugin({
      // 定义在编译使用的全局变量 在浏览器运行阶段时就是值了
      // 'process.env.NODE_ENV': JSON.stringify('production'),
      'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV),
      ENV: JSON.stringify('ENV')
    }),
    // 热膜替换
    new webpack.HotModuleReplacementPlugin()
    // ,
    // new webpack.ProvidePlugin({
    //   process: 'process/browser'
    // }),
  ]
}